package com.gitee.service;

import com.gitee.dao.UserDao;
import com.gitee.dao.recordDao;
import com.gitee.entity.Record;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

//涉及到事务操作，利用Transactional添加事务,默认回滚运行时异常，这里需要修改默认回滚异常类型
@Transactional(rollbackFor = Exception.class)
public class serviceImp implements service{

    @Resource
    private UserDao dao;
    @Resource
    private recordDao recordDao;

    //用户充值
    @Override
    public String insert(String userid,double recharge) {
        //i>0说明充值成功
        int i = dao.insert(userid,recharge);
        if(i>0){
            //在资金记录表中插入记录
            recordDao.insert(userid,0,recharge);
            return "充值成功";
        }else{
            return "充值失败";
        }
    }

    //根据用户id查询账户余额
    @Override
    public double selectRS(String userid) {
        return dao.selectRS(userid);
    }

    //根据用户id,花销修改账户余额
    @Override
    public String update(String userid, double expense) {
        //查询用户余额
        serviceImp imp = new serviceImp();
        double moneyRS = imp.selectRS(userid);
        //判断用户余额是否足够此次花销
        if(moneyRS>=expense){
            //调用数据访问层对用户余额进行修改
            int u = dao.update(userid,expense);
            //修改返回如果大于0，说明修改成功否则修改失败.
            if(u>0){
                //在资金记录表中插入记录
                recordDao.insert(userid,-1,expense);
                return "成功";
            }else{
                return "系统错误，请稍后尝试";
            }
        }else{
            return "余额不足,请及时充值";
        }
    }
    /*用户退款，返款到达钱包（银行卡暂时没法做）
    1.通过资金记录表查询出该条资金记录
    2.钱包余额加上该条消费记录
    3.删除这条消费记录
     */
    @Override
    public String refund(int recordid) {
        //根据资金记录id去查询该条资金记录
        Record record = recordDao.selectByid(recordid);
        //复用充值的dao层方法，将钱退回余额
        int i = dao.insert(record.getUserid(),record.getMoney());
        if(i>0){
            //删除资金记录中的该条数据
            recordDao.delete(recordid);
            return "退款成功";
        }else{
            return "系统繁忙，请稍后重新尝试";
        }
    }

    //查询钱包资金变动明细
    @Override
    public List<Record> selectAll(String userid) {
        List<Record> listRecord = recordDao.selectAll(userid);
        return listRecord;
    }

}
